x=7
y=15
countdown=0
mapX=0
mapY=0
playerX=100
playerY=100
wannamovex=0
wannamovey=0
nowalk = {80,81,64,65,48,49,12,209,210,225,226}
-- HELPER FUNCTIONS ------------------------------
function IsOnThisMap( obj )
return obj.mapX == mapx and obj.mapY == mapy
end
function GetDistance( x1, y1, x2, y2 )
return math.sqrt( ( x2 - x1 )^2 + ( y2 - y1 )^2 )
end
-- DEBUG -----------------------------------------
function Debug( title, thing, x, y, level )
print( title .. ": " .. type(thing), x + (level*8), y)
if thing == nil then
return
end
for key, value in pairs( thing ) do
y = y + 8
if type( value ) == "table" then
Debug( key, value, x + (level*8), y, level+1 )
else
print( key .. "=" .. value, x + (level*8), y )
end
end
end
function Debug2()
print( "MAP: " .. mapx .. "," .. mapy, 2, 128 )
print( "PLAYER: " .. x .. "," .. y, 50, 128 )
end
-- WARP HANDLER ----------------------------------
warps = {}
warptimer = 0
function CreateWarp( tile1X, tile1Y, tile2X, tile2Y )
newWarp = {}
newWarp.tileX = tile1X
newWarp.tileY = tile1Y
newWarp.mapX = math.floor( newWarp.tileX / 30 ) * 30
newWarp.mapY = math.floor( newWarp.tileY / 16 ) * 16
newWarp.x = (newWarp.tileX - newWarp.mapX)*8
newWarp.y = (newWarp.tileY - newWarp.mapY)*8
newWarp.tileDestX = tile2X
newWarp.tileDestY = tile2Y
newWarp.mapDestX = math.floor( newWarp.tileDestX / 30 ) * 30
newWarp.mapDestY = math.floor( newWarp.tileDestY / 16 ) * 16
newWarp.xDest = (newWarp.tileDestX - newWarp.mapDestX)*8
newWarp.yDest = (newWarp.tileDestY - newWarp.mapDestY)*8
table.insert( warps, newWarp )
end
function HandleWarps()
if warptimer == 0 then
for id, wp in pairs( warps ) do
if IsOnThisMap( wp ) then
if GetDistance( x, y, wp.x, wp.y ) <= 8 then
mapx = wp.mapDestX; mapy = wp.mapDestY
x = wp.xDest; y = wp.yDest
warptimer = 100
end
end -- IsOnMap
end -- for
elseif warptimer > 0 then
warptimer = warptimer - 1
end -- warptimer
end -- function
-- ENEMY HANDLER ---------------------------------
enemies = {}
function CreateEnemy( mapX, mapY, tileX, tileY, health, imgTopLeft, imgTopRight, imgBottomLeft, imgBottomRight )
newEnemy = {}
newEnemy.mapX = mapX
newEnemy.mapY = mapY
newEnemy.tileX = tileX
newEnemy.tileY = tileY
newEnemy.x = (tileX - mapX) * 8
newEnemy.y = (tileY - mapY) * 8
newEnemy.health = health
newEnemy.imgTopLeft = imgTopLeft
newEnemy.imgTopRight = imgTopRight
newEnemy.imgBottomLeft = imgBottomLeft
newEnemy.imgBottomRight = imgBottomRight
table.insert( enemies, newEnemy )
end
function UpdateEnemies()
for id, en in pairs( enemies ) do
if IsOnThisMap( en ) then
-- Enemy behavior
end
end
end
function DrawEnemies()
for id, en in pairs( enemies ) do
if IsOnThisMap( en ) then
spr( en.imgTopLeft, en.x-4, en.y-4, 0 )
spr( en.imgTopRight, en.x+4, en.y-4, 0 )
spr( en.imgBottomLeft, en.x-4, en.y+4, 0 )
spr( en.imgBottomRight, en.x+4, en.y+4, 0 )
print( en.health, en.x, en.y - 8 )
end
end
end
-- SETUP -----------------------------------------
-- MAPX MAPY TILEX TILEY HEALTH SPR1 SPR2 SPR3 SPR4
CreateEnemy( 0, 0, 1, 1, 3, 9, 10, 25, 26 )
-- TILE1X, TILE1Y, TILE2X, TILE2Y
CreateWarp( 57, 9, 62, 10 )
function TIC ()
map (mapX, mapY)
UpdateEnemies()
DrawEnemies()
HandleWarps()
-- SCROLL SCREEN
if x > 240 then
mapX=mapX+30
x=0
elseif x < -8 then
mapX = mapX - 30
x = 240-8
elseif y < -8 then
mapY = mapY - 16
y=136-8
elseif y > 136 then
mapY=mapY + 16
y=0
end -- x > 240
-- Account for screen wraparound
if mapX < 0 then mapX = mapX + 30*8
elseif mapX >= 30*8 then mapX = mapX - 30*8
end
if mapY < 0 then mapY = mapY + 16*8
elseif mapY >= 16*8 then mapY = mapY - 16*8
end
-- DRAW PLAYER
spr (0,x-4,y-4,11)
spr (1,x+4,y-4,11)
spr (16,x-4,y+4,11)
spr (17,x+4,y+4,11)
-- REGION 1 ACTION
if btn (4)
and x>=15*8 and x<=16*8
and y>=30 and y<=45
then
countdown=100
end -- btn 4
-- REGION 2 ACTION
if btn (4)
and mapX==30
and x>=3
and x<=22
and y>=45
and y<=45
then
mapX=210
mapY=119
end -- btn(4)
-- LOCK MESSAGE TIMER
if countdown > 0 then
print( "It is locked.", 121, 112 )
countdown = countdown-1
end -- countdown
-- WALKING / DISALLOWING SOLID BLOCKS
wannamovex=x
wannamovey=y
if btn (0) then
wannamovey=y-1
elseif btn (1) then
wannamovey=y+1
elseif btn (2) then
wannamovex=x-1
elseif btn (3) then
wannamovex=x+1
end -- btn
tilehere=mget(mapX+wannamovex/8,mapY+wannamovey/8)
canwalk=true
for id,badtile in pairs(nowalk) do
if tilehere==badtile then
canwalk=false
end -- canwalk
end -- for
if canwalk then
x=wannamovex
y=wannamovey
end -- canwalk
-- DEBUG INFO
print(x .. "," .. y, 5,5)
print(mapX .. "," .. mapY, 5, 15)
print(wannamovex .. "," .. wannamovey, 5, 25)
print(tilehere,50,5)
end -- TIC80
--
-- 000:bbbbbbbbbbbbbbbbbbbbbbbbbbb22222bbb22222bbb24242bbb44444bbb40444
-- 001:bbbbbbbbbbbbbbbbbbbbbbbb22bbbbbb22bbbbbb42bbbbbb42bbbbbb04bbbbbb
-- 002:6666666666666666666666666667666666666666666666676666666666666666
-- 003:6666666666666666666666666676766666666666667666666666666666666667
-- 006:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb1111bbbb1011bbbb1111bbbb1000
-- 007:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb11bbbbbb01bbbbbb11bbbbbb01bbbbbb
-- 009:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb4444bbbb4444bbbb4040bbbb4444
-- 010:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccbbbbb4ccbbbbb4ccbbbbb444bbbbb
-- 011:eeeeeeeeeeeefefeeefeeeeeeeeeeeeeeeeefeeeeeeeeeeeefeefefeeeeeeeee
-- 012:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
-- 016:bbb44444bbb44000bbb44444bbffffffbbffffffbb4fffffbbbfbbbbbb22bbbb
-- 017:44bbbbbb44bbbbbb44bbbbbbfffbbbbbfffbbbbbff4bbbbbbfbbbbbbb22bbbbb
-- 018:6666667666666666666766666666666666666667666666666667666666666666
-- 019:6666666666666666666666666667666666666676666666666666666666666666
-- 022:bbbb1110bbbb1111bbbbb111bbbbb1b1bbbb11b1bbbbbbb1bbbbb111bbb111bb
-- 023:01bbbbbb11bbbbbb11bbbbbbb1bbbbbbb11bbbbbbbbbbbbb11bbbbbbb111bbbb
-- 025:bbbb4000bbbb4444bb477777bb0bbb77bb0bbb77bb0bbb88bb0bbb88bb0bb008
-- 026:444bbbbb444bbbbb777bbbbb777bbbbb777bbbbb887bbbbb884bbbbb00bbbbbb
-- 048:6666666666664666666644666664444666444444644444446444444444444444
-- 049:6666666666666666644666664444466644444466444444444444444444444444
-- 064:0000000003033303030333030303330300000000030333030303330303033303
-- 065:0000000030330330303303303033033000000000303303303033033030330330
-- 080:00000000030aaa03030aaa03030aaa0000000000030333000303330000000000
-- 081:0000000030330aa030330aa000000aa000000000555003305540033055500000
-- 192:6666666666666666666666666666666666666666666666666666666666666666
-- 193:6666666666666666666666666666666666666666666666666666666666666666
-- 194:6666666666666666666666666666666666666666666666666666666666666666
-- 195:6666666666666666666666666666666666666666666666666666666666666666
-- 208:6666666666666666666666666666666666666666666666666666666666666666
-- 209:6666666666666666000000000ddddddd0ddddddd0dd000d00dddd0000ddddddd
-- 210:666666666666666600000000ddddddddddd0ddddd0000ddd0ddddddddddddddd
-- 211:6666666666666666066666660666666606666666066666660666666606666666
-- 224:6666666666666666666666666666666666666666666666666666666666666666
-- 225:0dddd0d00dddd00d0ddddddd0ddddddd0ddddddd0ddddddd0dddd0000dddd0dd
-- 226:0000dddd00d000dddddddddddddddddddddddddddddddddd0000ddddddd0dddd
-- 227:06666ee60eeeeeee0eefeeef0eeeeeee0eeeeeee0eeeefee0efeeefe0eeeeeee
-- 240:666666666666666666666666eeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeef
-- 241:0dddd0dd0dddd0dd00000000eeeeeeeeeeeeeeeeeeeeeeefefeeeeeeeeeeeeee
-- 242:dd40ddddddd0dddd00000000eeeeeeeeeeeeeeeeeeeeeeeeeefeefefeeeeeeee
-- 243:0eeeeeef0eeefeee0efeeefeeeeeeeeeeeeeefeeeeeffeeeeefeeeeeeeeeeeee
--
--
--
-- 000:00000000ffffffff00000000ffffffff
-- 001:0123456789abcdeffedcba9876543210
-- 002:0123456789abcdef0123456789abcdef
--
--
-- 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304000000000
--
--
-- 000:100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--
--
-- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57
--